package com.hck.domain.user.model.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 用户实体
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserEntity {
    
    /**
     * 用户ID
     */
    private Long id;
    
    /**
     * 用户名
     */
    private String username;
    
    /**
     * 密码（加密）
     */
    private String password;
    
    /**
     * 真实姓名
     */
    private String realName;
    
    /**
     * 身份证号
     */
    private String idCard;
    
    /**
     * 手机号
     */
    private String phone;
    
    /**
     * 邮箱
     */
    private String email;
    
    /**
     * 性别：0-女，1-男
     */
    private Integer gender;
    
    /**
     * 出生日期
     */
    private Date birthDate;
    
    /**
     * 住址
     */
    private String address;
    
    /**
     * 紧急联系人
     */
    private String emergencyContact;
    
    /**
     * 紧急联系电话
     */
    private String emergencyPhone;
    
    /**
     * 头像URL
     */
    private String avatar;
    
    /**
     * 状态：0-禁用，1-正常
     */
    private Integer status;
    
    /**
     * 最后登录时间
     */
    private Date lastLoginTime;
    
    /**
     * 最后登录IP
     */
    private String lastLoginIp;
    
    /**
     * 创建时间
     */
    private Date createTime;
    
    /**
     * 更新时间
     */
    private Date updateTime;
    
    /**
     * 检查用户是否可以登录
     */
    public boolean canLogin() {
        return status != null && status == 1;
    }
    
    /**
     * 更新登录信息
     */
    public void updateLoginInfo(String loginIp) {
        this.lastLoginTime = new Date();
        this.lastLoginIp = loginIp;
    }
    
    /**
     * 验证密码
     */
    public boolean validatePassword(String inputPassword, String encodedPassword) {
        // 这里应该使用密码加密工具进行验证
        // 暂时使用简单比较，实际项目中应该使用BCrypt等
        return encodedPassword.equals(inputPassword);
    }
    
    /**
     * 创建新用户（用于注册）
     */
    public static UserEntity createNewUser(String username, String password, String realName, 
                                         String phone, String email, String idCard, 
                                         Integer gender, Date birthDate, String address,
                                         String emergencyContact, String emergencyPhone) {
        UserEntity user = new UserEntity();
        user.setUsername(username);
        user.setPassword(password); // 实际项目中应该加密
        user.setRealName(realName);
        user.setPhone(phone);
        user.setEmail(email);
        user.setIdCard(idCard);
        user.setGender(gender);
        user.setBirthDate(birthDate);
        user.setAddress(address);
        user.setEmergencyContact(emergencyContact);
        user.setEmergencyPhone(emergencyPhone);
        user.setStatus(1); // 默认正常状态
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        return user;
    }
    
    /**
     * 检查用户名是否已存在
     */
    public boolean isUsernameExists() {
        return username != null && !username.trim().isEmpty();
    }
    
    /**
     * 检查手机号是否已存在
     */
    public boolean isPhoneExists() {
        return phone != null && !phone.trim().isEmpty();
    }
    
    /**
     * 检查邮箱是否已存在
     */
    public boolean isEmailExists() {
        return email != null && !email.trim().isEmpty();
    }
    
    /**
     * 检查身份证号是否已存在
     */
    public boolean isIdCardExists() {
        return idCard != null && !idCard.trim().isEmpty();
    }
} 